
#ifndef _ENCODING_MANAGER_H
#define _ENCODING_MANAGER_H

#include <fonts_manager.h>
#include <disp_manager.h>
/* 读取文件，显示字体步骤
 * 1、打开文件，mmap映射到进程地址空间
 * 2、根据文件头选择一种解码方式
 * 3、解码文件得到对应unicode编码
 * 4、根据unicode编码查询字体库，得到字体位图数据
 * 5、显示至屏幕上
*/
/*解码操作结构体*/
typedef struct EncodingOpr {
	char *name;                 /*解码模块名称*/
	int iHeadLen;  				/*对应格式的文件头长度*/
	PT_FontOpr ptFontOprSupportedHead;   /*支持的字体方法链表*/
	int (*isSupport)(uint8_t *pucBufHead);     /*是否支持该文件*/
	int (*GetCodeFrmBuf)(uint8_t *pucBufStart, uint8_t *pucBufEnd, uint32_t *pdwCode);    /*解码函数*/
	struct EncodingOpr *ptNext;   /*指向链表中下一个解码结构体*/
}T_EncodingOpr, *PT_EncodingOpr;


int RegisterEncodingOpr(PT_EncodingOpr ptEncodingOpr);


PT_EncodingOpr Encode(char *pcName);


void ShowEncodingOpr(void);


PT_DispOpr GetDispOpr(char *pcName);


PT_EncodingOpr SelectEncodingOprForFile(uint8_t *pucFileBufHead);


int AddFontOprForEncoding(PT_EncodingOpr ptEncodingOpr, PT_FontOpr ptFontOpr);


int DelFontOprFrmEncoding(PT_EncodingOpr ptEncodingOpr, PT_FontOpr ptFontOpr);


int EncodingInit(void);


int AsciiEncodingInit(void);


int  Utf16beEncodingInit(void);


int  Utf16leEncodingInit(void);


int  Utf8EncodingInit(void);


int GetCodeFrmBuf(uint8_t *pucBufStart, uint8_t *pucBufEnd, uint32_t *pdwCode);

#endif 

